package com.poi.batch.handler;

import com.poi.batch.domain.UserTest;
import org.apache.poi.xssf.eventusermodel.XSSFSheetXMLHandler;
import org.apache.poi.xssf.usermodel.XSSFComment;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by fangjicai on 2020/6/5.
 * 自定义sheet基于sax的解析处理器
 */
public class SheetHandler implements XSSFSheetXMLHandler.SheetContentsHandler {
    //封装实体对象
    private UserTest entity;

    // 实体对象集合
    private List<UserTest> userList = new ArrayList<>(MAX_EMPLOYEE);

    // 集合最大容量
    private static final int MAX_EMPLOYEE = 1024;

    // 第几次插入数据，初始值为1
    private int times = 1;

    // 总数据量
    private int allCount = 0;


    /**
     * 解析开始
     * @param rowNum
     */
    @Override
    public void startRow(int rowNum) {
        if (rowNum >0 ) {
            entity = new UserTest();
        }

    }

    /**
     * 当结束某一行的时候触发
     * @param i 行号
     */
    @Override
    public void endRow(int i) {
        System.out.println(entity);
        //判断集合是否装满
        if(userList.size() == MAX_EMPLOYEE) {
            // 假设有一个批量插入
            System.out.println("执行第" + times + "次插入 插入了："+userList.size()+"行 数据："+userList);
            times ++;
            userList.clear();
        }else{
            userList.add(entity);
        }

    }

    /**
     * 解析每一个单元格
     * @param cellReference
     * @param formattedValue
     * @param comment
     */
    @Override
    public void cell(String cellReference, String formattedValue, XSSFComment comment) {
        if(entity != null) {
            switch (cellReference.substring(0, 1)) {
                case "A":
                    entity.setId(Integer.parseInt(formattedValue));
                    break;
                case "B":
                    entity.setName(formattedValue);
                    break;
                default:
                    break;
            }
        }

    }

    /**
     * 处理头尾
     * @param text
     * @param isHeader
     * @param tagName
     */
    @Override
    public void headerFooter(String text, boolean isHeader, String tagName) {

    }

    public List<UserTest> getEmployeeList() {
        return userList;
    }

    public int getAllCount() {
        return allCount;
    }
}
